package com.gxstnu.service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.gxstnu.entity.Task;
import com.gxstnu.exception.CustomerException;
import com.gxstnu.mapper.TaskMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
public class TaskService {

    @Resource
    TaskMapper taskMapper;

    /**
     * 分页查询任务列表
     */
    public PageInfo<Task> selectPage(Integer pageNum, Integer pageSize, Task task) {
        // 开启分页查询
        PageHelper.startPage(pageNum, pageSize);
        List<Task> taskList = taskMapper.selectAll(task);
        return PageInfo.of(taskList);
    }

    /**
     * 查询所有任务
     */
    public List<Task> selectAll(Task task) {
        return taskMapper.selectAll(task);
    }

    /**
     * 根据ID查询任务详情
     */
    public Task selectById(Integer id) {
        Task task = taskMapper.selectById(id);
        if (task == null) {
            throw new CustomerException("任务不存在");
        }
        return task;
    }

    /**
     * 发布任务
     */
    public void publishTask(Task task) {
        // 检查发布者信息是否存在
        if (task.getPublisher() == null || task.getPublisherId() == null) {
            throw new CustomerException("发布者信息不能为空");
        }
        
        // 设置任务状态为待接单
        task.setStatus("pending");
        // 设置创建时间
        task.setCreateTime(new Date());
        taskMapper.insert(task);
    }

    /**
     * 接受任务
     */
    public void takeTask(Integer taskId, Integer accepterId, String accepter) {
        Task task = taskMapper.selectById(taskId);
        if (task == null) {
            throw new CustomerException("任务不存在");
        }
        
        // 检查任务状态是否为待接单
        if (!"pending".equals(task.getStatus())) {
            throw new CustomerException("该任务已被接单或已完成");
        }
        
        // 更新任务状态为进行中
        task.setStatus("in_progress");
        task.setAccepterId(accepterId);
        task.setAccepter(accepter);
        taskMapper.update(task);
    }

    /**
     * 完成任务
     */
    public void completeTask(Integer taskId) {
        Task task = taskMapper.selectById(taskId);
        if (task == null) {
            throw new CustomerException("任务不存在");
        }
        
        // 检查任务状态是否为进行中
        if (!"in_progress".equals(task.getStatus())) {
            throw new CustomerException("该任务不在进行中状态，无法标记为完成");
        }
        
        // 更新任务状态为已完成
        task.setStatus("completed");
        taskMapper.update(task);
    }

    /**
     * 取消任务
     */
    public void cancelTask(Integer taskId) {
        Task task = taskMapper.selectById(taskId);
        if (task == null) {
            throw new CustomerException("任务不存在");
        }
        
        // 检查任务状态是否为待接单或进行中
        if (!"pending".equals(task.getStatus()) && !"in_progress".equals(task.getStatus())) {
            throw new CustomerException("该任务已完成或已取消，无法取消");
        }
        
        // 更新任务状态为已取消
        task.setStatus("canceled");
        taskMapper.update(task);
    }

    /**
     * 添加任务
     */
    public void add(Task task) {
        taskMapper.insert(task);
    }

    /**
     * 更新任务
     */
    public void update(Task task) {
        taskMapper.update(task);
    }

    /**
     * 删除任务
     */
    public void deleteById(Integer id) {
        taskMapper.deleteById(id);
    }

    /**
     * 批量删除任务
     */
    public void deleteBatch(List<Task> tasks) {
        taskMapper.deleteBatch(tasks);
    }
}